const app = getApp()
const authApi = require('../../api/auth')
const balanceApi = require('../../api/balance')
const noticeApi = require('../../api/notice')

Page({
  data: {
    isLogin: false,
    userInfo: null,
    balance: '0.00',
    appointmentCount: 0,
    orderCount: 0,
    messageCount: 0,
    avatarTimestamp: Date.now() // 用于刷新头像缓存
  },

  onLoad: function (options) {
    this.checkLoginStatus()
  },

  onShow: function () {
    this.checkLoginStatus()
    if (this.data.isLogin) {
      this.loadUserData()
    }
  },

  // 检查登录状态
  checkLoginStatus() {
    const isLogin = app.globalData.isLogin
    const userInfo = app.globalData.userInfo

    this.setData({
      isLogin: isLogin,
      userInfo: userInfo
    })
  },

  // 加载用户相关数据
  async loadUserData() {
    try {
      // 获取最新的用户信息
      console.log('=== 开始获取用户信息 ===')
      const userInfo = await authApi.getUserInfo()
      console.log('获取到的用户信息:', userInfo)
      
      // 特别检查头像字段
      if (userInfo.avatar) {
        console.log('✅ 用户头像URL:', userInfo.avatar)
      } else {
        console.log('❌ 用户未设置头像或avatar字段为空')
      }
      
      // 更新全局用户信息
      app.setLoginStatus(userInfo, app.globalData.token)

      // 立即更新用户信息到页面，确保头像等信息及时显示
      this.setData({
        userInfo: userInfo
      })
      console.log('✅ 页面用户信息已更新')

      // 获取用户余额信息（异步，不影响用户信息显示）
      try {
        const balanceData = await balanceApi.getUserBalance()
        const formattedBalance = this.formatAmount(balanceData.balance || 0)

        this.setData({
          balance: formattedBalance
        })
        console.log('✅ 余额信息已更新:', formattedBalance)
      } catch (balanceError) {
        console.error('❌ 获取余额失败:', balanceError)
        this.setData({
          balance: '0.00'
        })
      }

      // 加载其他数据
      this.loadOtherData()

    } catch (error) {
      console.error('❌ 加载用户数据失败:', error)
      
      // 检查是否是权限问题
      if (error.statusCode === 403) {
        console.error('❌ 权限不足，可能需要重新登录')
        wx.showModal({
          title: '提示',
          content: '登录状态已过期，请重新登录',
          success: (res) => {
            if (res.confirm) {
              // 清除登录状态
              app.clearLoginStatus()
              // 跳转到登录页面
              wx.reLaunch({
                url: '/pages/auth/login/login'
              })
            }
          }
        })
      } else {
        // 其他错误，显示通用错误信息
        wx.showToast({
          title: '获取用户信息失败',
          icon: 'none'
        })
      }
    }
  },

  // 加载其他统计数据
  async loadOtherData() {
    try {
      // 获取未读消息数量
      const unreadCount = await noticeApi.getUnreadCount()

      // 这里应该调用相应的API获取真实数据
      // 暂时使用模拟数据
      this.setData({
        appointmentCount: 2,
        orderCount: 1,
        messageCount: unreadCount || 0
      })
    } catch (error) {
      console.error('加载统计数据失败:', error)
      // 出错时使用默认值
      this.setData({
        appointmentCount: 0,
        orderCount: 0,
        messageCount: 0
      })
    }
  },

  // 跳转到登录页面
  goToLogin() {
    wx.navigateTo({
      url: '/pages/auth/login/login'
    })
  },

  // 更换头像
  changeAvatar() {
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sizeType: ['compressed'],
      sourceType: ['camera', 'album'],
      success: (res) => {
        const tempFilePath = res.tempFiles[0].tempFilePath
        this.uploadAvatar(tempFilePath)
      },
      fail: (error) => {
        console.error('选择图片失败:', error)
        wx.showToast({
          title: '选择图片失败',
          icon: 'none'
        })
      }
    })
  },

  // 上传头像到服务器
  uploadAvatar(filePath) {
    const token = wx.getStorageSync('token')
    if (!token) {
      console.error('❌ 用户未登录，无token')
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }

    console.log('=== 开始上传头像 ===')
    console.log('文件路径:', filePath)
    console.log('当前token:', token ? '存在' : '不存在')

    wx.showLoading({
      title: '上传中...',
      mask: true
    })

    wx.uploadFile({
      url: app.globalData.baseUrl + '/avatar/upload-and-update',
      filePath: filePath,
      name: 'file',
      header: {
        'Authorization': 'Bearer ' + token
      },
      success: (res) => {
        wx.hideLoading()
        console.log('=== 头像上传响应 ===')
        console.log('状态码:', res.statusCode)
        console.log('响应数据:', res.data)

        try {
          const data = JSON.parse(res.data)
          console.log('解析后的数据:', data)
          
          if (data.code === 200) {
            console.log('✅ 头像上传成功')
            wx.showToast({
              title: '头像更新成功',
              icon: 'success'
            })

            // 立即更新页面显示的头像，提供即时反馈
            if (data.data && data.data.avatarUrl) {
              console.log('✅ 新头像URL:', data.data.avatarUrl)
              
              const updatedUserInfo = { ...this.data.userInfo }
              updatedUserInfo.avatar = data.data.avatarUrl

              this.setData({
                userInfo: updatedUserInfo,
                avatarTimestamp: Date.now() // 更新时间戳，刷新头像缓存
              })

              // 同时更新全局用户信息
              app.globalData.userInfo.avatar = data.data.avatarUrl
              wx.setStorageSync('userInfo', app.globalData.userInfo)
              
              console.log('✅ 头像更新完成，新的用户信息:', updatedUserInfo)
            } else {
              console.log('⚠️ 响应数据中没有avatarUrl字段')
            }

            // 异步重新加载完整的用户数据，确保数据一致性
            setTimeout(() => {
              console.log('🔄 重新加载用户数据以确保一致性')
              this.loadUserData()
            }, 500)
          } else {
            console.error('❌ 头像上传失败:', data)
            wx.showToast({
              title: data.message || '上传失败',
              icon: 'none'
            })
          }
        } catch (error) {
          console.error('❌ 解析响应失败:', error)
          console.error('原始响应数据:', res.data)
          wx.showToast({
            title: '上传失败',
            icon: 'none'
          })
        }
      },
      fail: (error) => {
        wx.hideLoading()
        console.error('❌ 头像上传请求失败:', error)
        
        // 详细错误信息
        if (error.statusCode === 403) {
          console.error('❌ 权限不足 - 403')
          wx.showToast({
            title: '权限不足，请重新登录',
            icon: 'none'
          })
        } else if (error.statusCode === 401) {
          console.error('❌ 未授权 - 401')
          wx.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none'
          })
        } else {
          wx.showToast({
            title: '上传失败，请重试',
            icon: 'none'
          })
        }
      }
    })
  },

  // 编辑个人资料
  editProfile() {
    if (!this.data.isLogin) {
      this.goToLogin()
      return
    }

    wx.navigateTo({
      url: '/pages/edit-profile/edit-profile',
      fail: (error) => {
        console.error('跳转到编辑资料页面失败:', error)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 跳转到充值页面
  goToRecharge() {
    if (!this.data.isLogin) {
      this.goToLogin()
      return
    }

    wx.navigateTo({
      url: '/pages/recharge/recharge',
      fail: (error) => {
        console.error('跳转到充值页面失败:', error)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 跳转到余额明细页面
  goToBalanceDetail() {
    if (!this.data.isLogin) {
      this.goToLogin()
      return
    }

    wx.navigateTo({
      url: '/pages/balance/balance',
      fail: (error) => {
        console.error('跳转到余额明细页面失败:', error)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 跳转到我的预约页面
  goToMyAppointments() {
    if (!this.data.isLogin) {
      this.goToLogin()
      return
    }

    wx.switchTab({
      url: '/pages/my-appointments/my-appointments',
      fail: (error) => {
        console.error('跳转到我的预约页面失败:', error)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 跳转到我的订单页面
  goToMyOrders() {
    if (!this.data.isLogin) {
      this.goToLogin()
      return
    }

    wx.navigateTo({
      url: '/pages/purchase-records/purchase-records',
      fail: (error) => {
        console.error('跳转到我的订单页面失败:', error)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 跳转到购买记录页面
  goToPurchaseRecords() {
    if (!this.data.isLogin) {
      this.goToLogin()
      return
    }

    wx.navigateTo({
      url: '/pages/purchase-records/purchase-records',
      fail: (error) => {
        console.error('跳转到购买记录页面失败:', error)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 跳转到消费记录页面
  goToConsumptionRecord() {
    if (!this.data.isLogin) {
      this.goToLogin()
      return
    }

    wx.navigateTo({
      url: '/pages/consumption-records/consumption-records',
      fail: (error) => {
        console.error('跳转到消费记录页面失败:', error)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 跳转到消息中心页面
  goToMessages() {
    if (!this.data.isLogin) {
      this.goToLogin()
      return
    }

    wx.navigateTo({
      url: '/pages/message-center/message-center',
      fail: (error) => {
        console.error('跳转到消息中心页面失败:', error)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 修改密码
  changePassword() {
    if (!this.data.isLogin) {
      this.goToLogin()
      return
    }

    wx.navigateTo({
      url: '/pages/change-password/change-password',
      fail: (error) => {
        console.error('跳转到修改密码页面失败:', error)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 跳转到关于我们页面
  goToAbout() {
    wx.showModal({
      title: '关于我们',
      content: '理发店预约小程序\n版本：1.0.0\n\n为您提供便捷的理发预约服务',
      showCancel: false,
      confirmText: '知道了'
    })
  },

  // 退出登录
  logout() {
    wx.showModal({
      title: '确认退出',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          // 清除登录状态
          app.clearLoginStatus()
          
          // 更新页面状态
          this.setData({
            isLogin: false,
            userInfo: null,
            balance: '0.00',
            appointmentCount: 0,
            orderCount: 0,
            messageCount: 0
          })

          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          })
        }
      }
    })
  },

  // 格式化金额
  formatAmount(amount) {
    if (!amount && amount !== 0) return '0.00'
    return parseFloat(amount).toFixed(2)
  }
}) 